#include "array.h"

int &array::operator[](int n) const // 重载[]运算符
{
    if (n >= 0 && n < maxsize)
        return ptr[n];
    else
        throw "数组越界";
}

int array::fill(int num) // 填充数组,返回填充个数
{
    int i = 0;
    for (i = 0; i < maxsize; i++)
    {
        ptr[i] = num;
    }
    return i;
}

/*
    函数功能：改变指定位置的数据
    参数列表：n：插入位置，num：要插入的数据
    返回值：成功ture失败false，位置不在范围内
*/
bool array::assignment(int n, int num)
{
    if (n >= 0 && n <= (size - 1)) // 判断数据是否在已有元素的范围
    {
        ptr[n] = num;
        return true;
    }
    else
    {
        return false;
    }
}
/*
    函数功能:查询指定下标的数据
    参数列表：num 要查找的值
    返回值：成功返回下标，失败返回-1
*/
int array::find_by_num(int num) // 查找指定值的位置
{
    for (int i = 0; i < arrsize; i++)
    {
        if (ptr[i] == num)
        {
            return i;
        }
    }
    return -1;
}

/*
   函数功能:查询指定下标的数据
   参数列表：n：插入位置，num：接收数据
   返回值：返回指定的值的引用
*/
int &array::at(int n) // 查找指定下标
{
    if (n >= 0 && n < (maxsize - 1))
    {
        return ptr[n];
    }
    else
    {
        throw "数组越界";
    }
}

int &array::front() const // 返回数组第一个元素的引用
{
    return ptr[0];
}
int &array::back() const // 返回数组最后一个元素的引用
{
    return ptr[maxsize - 1];
}

bool array::swap(array &other) // 交换 //注意交换产生double free问题
{
    int *temp = other.ptr;
    other.ptr = ptr;
    ptr = temp;
    return true;
}

bool array::sort(void) // 冒泡排序
{
    int temp = 0;
    for (int i = 0; i < maxsize; i++)
    {
        for (int j = 0; j < maxsize - 1; j++)
        {
            if (ptr[j] > ptr[j + 1])
            {
                temp = ptr[j];
                ptr[j] = ptr[j + 1];
                ptr[j + 1] = temp;
            }
        }
    }
}